package br.com.locanet.service.impl;

import java.util.List;

import javax.persistence.PersistenceException;

import br.com.locanet.bean.impl.CopiaFilme;
import br.com.locanet.dao.database.impl.CopiaFilmeDAO;
import br.com.locanet.exception.ExceptionList;
import br.com.locanet.exception.InvalidAttributeException;
import br.com.locanet.service.AbstractEntityService;

public class CopiaFilmeService extends
		AbstractEntityService<CopiaFilme, CopiaFilmeDAO> {
	@Override
	public void doValidateRequiredFields(CopiaFilme entity) throws ExceptionList,PersistenceException {
		ExceptionList fieldsInvalidos = new ExceptionList();

		if (entity.getCodigo() == null)
			fieldsInvalidos.add(new InvalidAttributeException(
					"codigoNaoInformado"));
		if (entity.getFilme() == null || entity.getFilme().getId() ==null)
			fieldsInvalidos.add(new InvalidAttributeException(
					"filmeNaoInformado"));
		if (entity.getStatus() == null)
			fieldsInvalidos.add(new InvalidAttributeException(
					"statusNaoInformado"));
		
		if (!fieldsInvalidos.getListaErros().isEmpty())
			throw fieldsInvalidos;
	}

	@Override
	public void doValidateBusinessRules(CopiaFilme entity) throws ExceptionList,PersistenceException,ClassNotFoundException{
		ExceptionList excecoes = new ExceptionList();
		
		CopiaFilme copiaFilme = new CopiaFilme();
		
		copiaFilme.setCodigo(entity.getCodigo());
		List<CopiaFilme> copias = getEntityDAO().find(copiaFilme);
		for (CopiaFilme copia : copias)
			if (copia.getCodigo().equals(copiaFilme.getCodigo()) && !copia.getId().equals(entity.getId())){
				excecoes.add(new InvalidAttributeException("codigoJaCadastrado"));
				break;
			}
		
		if (!excecoes.getListaErros().isEmpty())
			throw excecoes;
	}
}
